package abel.wlmr.model.type;

import java.util.HashMap;
import java.util.Map;

/**
 * 通信协议类型：数值范围 0～255，其中 0：表示终端无需对本序号的远传表计装置进行抄表； 1：
 * DL/T 645—1997.； 2：交流采样装置通信协议； 30： DL/T 645—2007； 31：“串行接口连接窄带
 * 低压载波通信模块”接口协议； 32： CJ/T 188 户用计量仪表数据传输技术条件； 33： GB/T26831.2
 * 社区能源计量超收系统规范 第 2 部分和 GB/T26831.2 社区能源计量超收系统规范 第 3 部分；
 * 其他：备用。
 * 
 * @author Abel
 */
public enum ProtocolType {
    NoReading(0),
    DLT645_1997(1),
    AlterSample(2),
    DLT645_2007(30),
    ComCarrier(31),
    CJT188(32),
    GBT26831_2(33),
    Reserverd(255);

    private short value;

    private static Map<Short, ProtocolType> ptMap = new HashMap<>();
    static {
        for (ProtocolType pt : ProtocolType.values()) {
            ptMap.put(pt.value, pt);
        }
    }

    private ProtocolType(int v) {
        this.value = (short) v;
    }

    public static ProtocolType findEnumByValue(short v) {
        if (v < 0 || v > 255) {
            return null;
        }

        if (ptMap.containsKey(v)) {
            return ptMap.get(v);
        } else {
            Reserverd.value = v;
            return Reserverd;
        }
    }

    /**
     * @return the value
     */
    public short getValue() {
        return value;
    }
}
